package api.map;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

public class MapDemo2 {
    public static void main(String[] args) {
        Map<String,Integer> map=new LinkedHashMap<>();
        map.put("语文",99);
        map.put("数学",59);
        map.put("英语",30);
        map.put("物理",80);
        map.put("化学",70);
        System.out.println(map);

        /*
        遍历所有的key
        Set<K> keySet()
        将当前Map中所有的key以一个Set集合形式返回，遍历这个集合就等于遍历了所有的key

         */
        Set<String> keyset=map.keySet();
        for(String key:keyset){
            System.out.println("key:"+key);

        }
        //keyset.forEach(e -> System.out.println(e));
        //keyset.forEach(System.out::println);

        /*
        遍历每一组键值对
        Set<Entry> entrySet()

        Map.Entry它的每一个实例用于表示Map中的一组键值对
        Entry有两个常用的方法：
        getkey(),getvalue()分别用于获取其表示的键值对中的key和value
         */
        Set<Map.Entry<String,Integer>> entrySet  = map.entrySet();
        for(Map.Entry<String,Integer> e:entrySet){
            String key=e.getKey();
            Integer value=e.getValue();
            System.out.println(key+":"+value);

        }

        /*
        遍历所有的value
        Collection<v> values()
        将当前Map中的所有的value值以集合形式返回，遍历该集合等于遍历所有的value
         */
        Collection<Integer> values = map.values();
        for (Integer value:values){
            System.out.println("value:"+value);
        }

//        keyset.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });

        keyset.forEach(s -> System.out.println(s));
        /*
        在lambda表达式中，如果参数与调用方法中传入参数一致时，可以简写为方法引用：
        e->对象.方法(e);
        可以写为:
        对象::方法

        */
        keyset.forEach(System.out::println);





        /*
        Map 也提供了forEach
         */
        map.forEach(new BiConsumer<String, Integer>() {
            public void accept(String k, Integer v) {
                System.out.println(k+":"+v);
            }
        });
        map.forEach((k,v)-> System.out.println(k+":"+v));


    }
}
